/**
* @file    nmea_utils.h
* @author  chenyu (chenyu@cdsihan.com)
* @brief
* @version 0.1
* @date    2022-06-09
*
* @copyright 2021-2026 CHENGDU SIHAN TECHNOLOGY STOCK CO.,LTD. All rights reserved.
*
*/
#ifndef NMEA_UTILS_H
#define NMEA_UTILS_H
/*------------------------- 明确定义消息类型 -------------------------*/
typedef enum {
    NMEA_TYPE_UNKNOWN = 0,
    NMEA_TYPE_GNGGA,
    NMEA_TYPE_GNZDA
} NmeaType;

/*------------------------- 分离数据结构 -------------------------*/
typedef struct {
    NmeaType type;          // 消息类型
    int status;             // 解析状态 0=成功

    // 时间数据 (GNZDA专用)
    struct {
        int hour;           // 时 (0-23)
        int min;            // 分 (0-59)
        int sec;            // 秒 (0-59)
        int msec;           // 毫秒 (0-999)
        int day;            // 日 (1-31)
        int month;          // 月 (1-12)
        int year;           // 年 (实际年份，如2023)
    } datetime;

    // 定位数据 (GNGGA专用)
    struct {
        double latitude;    // 纬度 (十进制)
        double longitude;   // 经度 (十进制)
        int fix_quality;    // 定位质量
        int satellites;     // 卫星数
        float hdop;         // 水平精度因子
        float altitude;     // 海拔高度 (米)
    } position;
} NMEA_Data;

NMEA_Data parse_nmea(const char *sentence);
void print_data(const NMEA_Data *data);
#endif //NMEA_UTIL_H
